/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import model.pojo.Nota;

/**
 *
 * @author leonidia
 */
public final class NotaDaoImpl implements NotaDao {

    private ArrayList<Nota> listaNotas;
    /**
     * *********associacao***********
     */
    private ArrayList<Integer> idAtividade;
    private ArrayList<Integer> idAluno;
    private ArrayList<Integer> idNota;

    public NotaDaoImpl() throws IOException {
        this.listaNotas = carregarNotas();
        carregarAssocNota();
    }

    @Override
    public void setNotas(ArrayList<Nota> listaNotas) {
        this.listaNotas = listaNotas;
    }

    @Override
    public ArrayList<Nota> getNotas() {
        return this.listaNotas;
    }

    @Override
    public boolean addNota(Nota nota, Integer idaluno, Integer idAtividade) {
        return ((this.listaNotas.add(nota))
                && (this.idAtividade.add(idAtividade))
                && (this.idAluno.add(idaluno))
                && (this.idNota.add(nota.getId())));
    }

    @Override
    public void salvarNota(ArrayList<Nota> notas) throws IOException {
        try (FileWriter writer = new FileWriter("Notas.txt", false);
                PrintWriter saida = new PrintWriter(writer, true)) {
            int i;
            for (i = 0; i < notas.size(); i++) {
                writer.write(notas.get(i).getId() + ";" + notas.get(i).getNota() + "\n");
            }
        }
    }

    @Override
    public ArrayList<Nota> carregarNotas() throws IOException {
        ArrayList<Nota> list;
        list = new ArrayList<>();
        File file = new File("Notas.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        try (BufferedReader in = new BufferedReader(new FileReader(file))) {
            String str;
            while ((str = in.readLine()) != null) {
                String[] t = str.split(";");
                Nota nota = new Nota(Integer.parseInt(t[0]), Float.parseFloat(t[1]));
                list.add(nota);
            }
        }
        return list;
    }

    //Chgange!   
    @Override
    public Integer novoId() {
        if (listaNotas.isEmpty()) {
            return 0;
        }
        return listaNotas.get(listaNotas.size() - 1).getId() + 1;
    }

    @Override
    public Integer ultimoId() {
        if (listaNotas.isEmpty()) {
            return 0;
        }
        return listaNotas.get(listaNotas.size() - 1).getId();
    }

    /**
     * ****************associação**********
     */
    @Override
    public void salvarAssocNota() throws IOException {
        try (FileWriter writer = new FileWriter("AssocNota.txt", false);
                PrintWriter saida = new PrintWriter(writer, true)) {
            int i;
            for (i = 0; i < idAluno.size(); i++) {
                writer.write(idNota.get(i) + ";" + idAluno.get(i) + ";" + idAtividade.get(i) + "\n");
            }
        }
    }

    public void carregarAssocNota() throws IOException {
        this.idNota = new ArrayList<>();
        this.idAluno = new ArrayList<>();
        this.idAtividade = new ArrayList<>();
        File file = new File("AssocNota.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        try (BufferedReader in = new BufferedReader(new FileReader(file))) {
            String str;
            while ((str = in.readLine()) != null) {
                String[] t = str.split(";");
                idNota.add(Integer.parseInt(t[0]));
                idAluno.add(Integer.parseInt(t[1]));
                idAtividade.add(Integer.parseInt(t[2]));
            }
        }
    }

   

    
    public ArrayList<Integer> getListaAlunos() {
        return this.idAluno;
    }

    
    public ArrayList<Integer> getListaAtividades() {
        return idNota;
    }

    public void setListaAlunos(ArrayList<Integer> listaAluno) {
        this.idAluno = listaAluno;
    }


    public void setListaAtividades(ArrayList<Integer> listaAtividade) {
        this.idAtividade = listaAtividade;
    }
}